package com.zjj.learn.algorithmPlus.segment1.stack;

/**
 * 栈的定义
 * 栈是一种先进后出的线性结构
 *
 * @author zjj_admin
 */
public interface Stack<E> {

    /**
     * 向栈顶压入一个数据
     *
     * @param value 添加数据
     * @return
     */
    boolean push(E value);

    /**
     * 返回并移除栈顶元素，没有数据返回 null
     *
     * @return
     */
    E pop();

    /**
     * 返回栈顶元素，没有数据返回 null
     *
     * @return
     */
    E peek();

    /**
     * 判断当前栈是否为空
     *
     * @return
     */
    boolean isEmpty();

    /**
     * 判断当前栈是否已经满了
     *
     * @return
     */
    boolean isFull();

    /**
     * 返回栈中数据个数
     *
     * @return
     */
    int size();
}
